package com.zzh.partnersys.common.rate.resolver;

import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.zzh.partnersys.common.rate.RateLimiter;
import org.aspectj.lang.JoinPoint;

/**
 * 用户级别的限流 Key 解析器，使用方法名 + 方法参数 + userId + userType，组装成一个 Key
 *
 * 为了避免 Key 过长，使用 MD5 进行“压缩”
 *
 */
public class UserRateLimiterKeyResolver implements RateLimiterKeyResolver {

    @Override
    public String resolver(JoinPoint joinPoint, RateLimiter rateLimiter) {
        String methodName = joinPoint.getSignature().toString();
        String argsStr = StrUtil.join(",", joinPoint.getArgs());
        //可以写一个工具类，在请求进行拦截请求userId、usertype并存储到request的Attribute中来获取 
        // Long userId = WebFrameworkUtils.getLoginUserId();
        // Integer userType = WebFrameworkUtils.getLoginUserType();
//        return SecureUtil.md5(methodName + argsStr + userId + userType);
        return SecureUtil.md5(methodName + argsStr);
    }

}
